package jgl.vajra.kingkong.widget.retrofithelper.http;


import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import jgl.vajra.kingkong.bean.AdditionalRequirementsBean;
import jgl.vajra.kingkong.bean.AlipayAccountBean;
import jgl.vajra.kingkong.bean.BankCardBean;
import jgl.vajra.kingkong.bean.BillDetailsBean;
import jgl.vajra.kingkong.bean.BindAccountBean;
import jgl.vajra.kingkong.bean.CityChoiceBean;
import jgl.vajra.kingkong.bean.CommentListBean;
import jgl.vajra.kingkong.bean.CommissionDetailsBean;
import jgl.vajra.kingkong.bean.CommonAddressBean;
import jgl.vajra.kingkong.bean.ConditionTypeBean;
import jgl.vajra.kingkong.bean.CouponAvailableBean;
import jgl.vajra.kingkong.bean.HomeCarModelBean;
import jgl.vajra.kingkong.bean.HomeMechanicsBean;
import jgl.vajra.kingkong.bean.HomeVehicleTypeBean;
import jgl.vajra.kingkong.bean.InvitePrizeBalanceBean;
import jgl.vajra.kingkong.bean.LieEarnAmountBean;
import jgl.vajra.kingkong.bean.LieEarnCommissionBean;
import jgl.vajra.kingkong.bean.LoginInfoBean;
import jgl.vajra.kingkong.bean.MarketPriceBean;
import jgl.vajra.kingkong.bean.MyTeamAllListBean;
import jgl.vajra.kingkong.bean.MyTeamPeopleNumBean;
import jgl.vajra.kingkong.bean.MyWalletBean;
import jgl.vajra.kingkong.bean.NearbyPointsBean;
import jgl.vajra.kingkong.bean.NicknamePageBean;
import jgl.vajra.kingkong.bean.OnLinePayBean;
import jgl.vajra.kingkong.bean.OpenCityBean;
import jgl.vajra.kingkong.bean.OrderDetailsBean;
import jgl.vajra.kingkong.bean.OrderDetailsCompleteBean;
import jgl.vajra.kingkong.bean.OrderEvaluateBean;
import jgl.vajra.kingkong.bean.OrderListBean;
import jgl.vajra.kingkong.bean.OrderPaymentDetailsBean;
import jgl.vajra.kingkong.bean.OwnerDetailsBean;
import jgl.vajra.kingkong.bean.OwnerOrderListBean;
import jgl.vajra.kingkong.bean.SpeechInfoBean;
import jgl.vajra.kingkong.bean.StageInfoBean;
import jgl.vajra.kingkong.bean.VersionUpdateBean;
import jgl.vajra.kingkong.bean.WalletDetailedBean;
import jgl.vajra.kingkong.bean.WithdrawalRecordBean;
import jgl.vajra.kingkong.widget.bean.BannerInfo;
import jgl.vajra.kingkong.widget.bean.BaseListData;
import jgl.vajra.kingkong.widget.bean.BaseRequestData;
import jgl.vajra.kingkong.widget.bean.UploadFileBean;
import okhttp3.MultipartBody;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Header;
import retrofit2.http.HeaderMap;
import retrofit2.http.POST;
import retrofit2.http.PUT;
import retrofit2.http.QueryMap;

/**
 * @Author zhangshuqi
 * @CreateTime 2018/4/10
 * @Describe
 */

public interface ApiServer {
    @FormUrlEncoded
    @POST("v1/SaveFile/base64")
    Observable<BaseRequestData<List<UploadFileBean>>> uploadFileWithRequestBody(@Field("base64") String multipartBody);

    @POST("files/upload")
    Observable<BaseRequestData<String>> uploadFileWithRequestBody(@HeaderMap Map<String, Object> map, @Body MultipartBody multipartBody);

    Observable<BaseRequestData<List<BannerInfo>>> getBannerInfo(Map<String, Object> map);

    @FormUrlEncoded
    @POST("account/autoRegisterAndBind")
    Observable<BaseRequestData<String>> register(@FieldMap Map<String, Object> map);

    @FormUrlEncoded
    @POST("account/setPwd")
    Observable<BaseRequestData<Boolean>> passwordSet(@FieldMap Map<String, Object> map);


    @POST("user/no-login/register")
    Observable<BaseRequestData<LoginInfoBean>> login(@Body Map<String, Object> map, @Header("Authorization") String Authorization);

    @GET("user/forward/obtain-secretkey")
    Observable<BaseRequestData<String>> getAESSecretKey(@Header("Authorization") String Authorization);

    @GET("user/no-login/order-number")
    Observable<BaseRequestData<String>> getRandomOrderNumber(@Header("Authorization") String Authorization);

    @PUT("v1/member/Password_Set")
    Observable<BaseRequestData<Object>> editPassword(@Body Map<String, Object> map);

    @GET("user/no-login/verifycode")
    Observable<BaseRequestData<String>> getVerifyCode(@HeaderMap Map<String, Object> map);

    @GET("account/sendValidCode4Test")
    Observable<BaseRequestData<String>> getVerifyTestCode(@QueryMap Map<String, Object> map);

    @GET("v1/member/reauth")
    Observable<BaseRequestData<LoginInfoBean>> refreshToken();

    @GET("v1/member/reauth")
    Call<BaseRequestData<LoginInfoBean>> refreshTokenCall();


    @GET("push/jpush/getMyCourseTagId")
    Observable<BaseRequestData<List<String>>> getMyCourseTagId();


    @POST("user/location/record")
    Observable<BaseRequestData<Object>> uploadLocation(@Body Map<String, Object> map);

    @GET("open/point-speech-info")
    Observable<BaseRequestData<SpeechInfoBean>> getSpeechInfoData(@HeaderMap Map<String, Object> map);

    @GET("open/standard-car-category-info")
    Observable<BaseRequestData<List<HomeMechanicsBean>>> getCarTypeData(@HeaderMap Map<String, Object> map);

    @GET("open/standard-car-model-list")
    Observable<BaseRequestData<List<HomeCarModelBean>>> getCarModelData(@HeaderMap Map<String, Object> map);

    @GET("open/standard-car-info")
    Observable<BaseRequestData<HomeVehicleTypeBean>> getCarInfoData(@HeaderMap Map<String, Object> map);

    @GET("open/area-info")
    Observable<BaseRequestData<List<CityChoiceBean>>> getAreaInfoData(@HeaderMap Map<String, Object> map);

    @POST("user/and-edit-common-used-address")
    Observable<BaseRequestData<String>> addAddressData(@Body Map<String, Object> map, @Header("Authorization") String authorization);

    @GET("user/common-used-address")
    Observable<BaseRequestData<List<CommonAddressBean>>> getAddressList(@Header("Authorization") String authorization);

    @POST("user/delete-common-used-address")
    Observable<BaseRequestData<String>> deleteAddress(@Header("Authorization") String authorization, @Header("id") long id);

    @GET("open/stage-info")
    Observable<BaseRequestData<List<StageInfoBean>>> getStageInfo(@Header("Authorization") String authorization, @Header("model") String model, @Header("area") String area);

    @GET("open/preparatory-price")
    Observable<BaseRequestData<MarketPriceBean>> getMarketPriceData(@HeaderMap Map<String, Object> map);

    @POST("order/call-car-order")
    Observable<BaseRequestData<String>> getPlaceOrderData(@Body Map<String, Object> map, @Header("Authorization") String authorization);

    @GET("open/extra-require")
    Observable<BaseRequestData<List<AdditionalRequirementsBean>>> getAdditionalRequirementsData(@HeaderMap Map<String, Object> map);

    @POST("order/cancel-call-car-order")
    Observable<BaseRequestData<String>> cancelOrder(@HeaderMap Map<String, Object> map);

    //更换司机
    @POST("pick-up/cancel")
    Observable<BaseRequestData<String>> changeDriverOrder(@HeaderMap Map<String, Object> map);

    @POST("order/call-car-order-reward")
    Observable<BaseRequestData<String>> rewardOrder(@HeaderMap Map<String, Object> map);

    @GET("open/car-add-price-info")
    Observable<BaseRequestData<List<String>>> getPriceData(@HeaderMap Map<String, Object> map);

    @GET("order/order-status")
    Observable<BaseRequestData<BaseListData<OrderListBean>>> getOrderList(@HeaderMap Map<String, Object> map);

    @GET("order/order-detail")
    Observable<BaseRequestData<OrderPaymentDetailsBean>> getOrderPaymentDetailsData(@HeaderMap Map<String, Object> map);

    @GET("funds/balance")
    Observable<BaseRequestData<String>> getAccountBalanceData(@HeaderMap Map<String, Object> map);

    @POST("funds/balance-pay")
    Observable<BaseRequestData<Object>> determinePaymentData(@HeaderMap Map<String, Object> map);

    @GET("driver/driver-work-status")
    Observable<BaseRequestData<OrderDetailsBean>> getOrderDetailsData(@HeaderMap Map<String, Object> map);

    @POST("order/finish-confirm")
    Observable<BaseRequestData<Object>> determineOrderCompleteData(@HeaderMap Map<String, Object> map);

    @GET("open/show-rim-car")
    Observable<BaseRequestData<List<NearbyPointsBean>>> getNearbyPoints(@HeaderMap Map<String, Object> map);

    @GET("order/finish")
    Observable<BaseRequestData<OrderDetailsCompleteBean>> getOrderDetailsCompleteData(@HeaderMap Map<String, Object> map);

    @POST("user/refresh-token")
    Observable<BaseRequestData<LoginInfoBean>> getMineData(@HeaderMap Map<String, Object> map);

    @GET("open/default-nickname")
    Observable<BaseRequestData<List<NicknamePageBean>>> getNicknameData(@HeaderMap Map<String, Object> map);

    @POST("user/edit-user-info")
    Observable<BaseRequestData<Object>> modifyInformation(@HeaderMap Map<String, Object> map);

    @GET("open/comment-title")
    Observable<BaseRequestData<OrderEvaluateBean>> getOrderEvaluateData(@HeaderMap Map<String, Object> map);

    @POST("comment/say")
    Observable<BaseRequestData<Object>> submitCommentsData(@Body Map<String, Object> map, @Header("Authorization") String authorization);

    @GET("open/client-owner-detail")
    Observable<BaseRequestData<OwnerDetailsBean>> getOwnerDetailsData(@HeaderMap Map<String, Object> map);

    @GET("open/catch-order-list")
    Observable<BaseRequestData<BaseListData<OwnerOrderListBean>>> getHistoricalOrderList(@HeaderMap Map<String, Object> map);

    @GET("open/client-comment-list")
    Observable<BaseRequestData<BaseListData<CommentListBean>>> getFullExposureList(@HeaderMap Map<String, Object> map);

    @POST("funds/pay")
    Observable<BaseRequestData<OnLinePayBean>> payWx(@HeaderMap Map<String, Object> map);

    @POST("funds/pay")
    Observable<BaseRequestData<String>> payWxCallback(@HeaderMap Map<String, Object> map);

    @POST("funds/fill-cash")
    Observable<BaseRequestData<OnLinePayBean>> payRechargeWx(@HeaderMap Map<String, Object> map);

    @POST("funds/fill-cash")
    Observable<BaseRequestData<String>> payRechargeWxCallback(@HeaderMap Map<String, Object> map);

    @GET("open/app-version")
    Observable<BaseRequestData<VersionUpdateBean>> getVersionUpdate(@HeaderMap Map<String, Object> map);

    @GET("funds/under-income-people")
    Observable<BaseRequestData<MyTeamPeopleNumBean>> getMyTeamPeopleNum(@HeaderMap Map<String, Object> map);

    @GET("funds/team-reward-sum")
    Observable<BaseRequestData<LieEarnAmountBean>> getLieEarnData(@HeaderMap Map<String, Object> map);

    @GET("funds//brokerage-params")
    Observable<BaseRequestData<List<LieEarnCommissionBean>>> getLieEarnCommissionData(@HeaderMap Map<String, Object> map);

    @GET("funds/my-team")
    Observable<BaseRequestData<BaseListData<MyTeamAllListBean>>> getMyTeamAllList(@HeaderMap Map<String, Object> map);

    @GET("funds/spread_level")
    Observable<BaseRequestData<String>> getSpreadLevelData(@HeaderMap Map<String, Object> map);

    @GET("funds/income-detail")
    Observable<BaseRequestData<BaseListData<CommissionDetailsBean>>> getCommissionDetailsListData(@HeaderMap Map<String, Object> map);

    @GET("funds/income-withdraw-list")
    Observable<BaseRequestData<BaseListData<WithdrawalRecordBean>>> getWithdrawalRecordListData(@HeaderMap Map<String, Object> map);

    @GET("funds/available-discount-coupon")
    Observable<BaseRequestData<List<CouponAvailableBean>>> getCouponsAvailableData(@HeaderMap Map<String, Object> map);

    //    @GET("funds/invite-reward-balance")
    @GET("funds/client-invite-reward")
    Observable<BaseRequestData<InvitePrizeBalanceBean>> getInvitePrizeBalanceData(@HeaderMap Map<String, Object> map);

    @GET("funds/owner-invite-reward")
    Observable<BaseRequestData<InvitePrizeBalanceBean>> getInvitePrizeOwnerData(@HeaderMap Map<String, Object> map);

    @GET("funds/driver-invite-reward")
    Observable<BaseRequestData<InvitePrizeBalanceBean>> getInvitePrizeOperatorData(@HeaderMap Map<String, Object> map);

    @GET("funds/sum-invite-reward")
    Observable<BaseRequestData<InvitePrizeBalanceBean>> getInvitePrizeSumData(@HeaderMap Map<String, Object> map);

    @POST("funds/internal-transfer")
    Observable<BaseRequestData<String>> getWithdrawalBalanceData(@HeaderMap Map<String, Object> map);

    @GET("funds/team-reward-balance")
    Observable<BaseRequestData<String>> getLieEarnBalanceData(@HeaderMap Map<String, Object> map);

    @GET("funds/discount-coupon")
    Observable<BaseRequestData<BaseListData<CouponAvailableBean>>> getCouponList(@HeaderMap Map<String, Object> map);

    @GET("funds/income-and-expenditure-type")
    Observable<BaseRequestData<ConditionTypeBean>> getConditionTypeData(@HeaderMap Map<String, Object> map);

    @GET("funds/owner-wallet-Detail")
    Observable<BaseRequestData<BaseListData<WalletDetailedBean>>> getWalletDetailedListData(@HeaderMap Map<String, Object> map);

    @GET("funds/bank-list")
    Observable<BaseRequestData<List<BindAccountBean>>> getBindAccountData(@HeaderMap Map<String, Object> map);

    @GET("funds/alipay-auth-info")
    Observable<BaseRequestData<String>> getAlipayAuthData(@HeaderMap Map<String, Object> map);

    @GET("funds/alipay-account-info")
    Observable<BaseRequestData<AlipayAccountBean>> getAlipayAccountData(@HeaderMap Map<String, Object> map);

    @POST("funds/bind-change-funds-account")
    Observable<BaseRequestData<String>> bindBankCardData(@Body Map<String, Object> map, @Header("Authorization") String authorization);

    @POST("funds/apply-income-withdraw")
    Observable<BaseRequestData<String>> incomeWithdrawData(@HeaderMap Map<String, Object> map);

    @GET("funds/account-detail")
    Observable<BaseRequestData<BillDetailsBean>> getBillDetailsData(@HeaderMap Map<String, Object> map);

    @GET("funds/bank-detail")
    Observable<BaseRequestData<BankCardBean>> getBankCardData(@HeaderMap Map<String, Object> map);

    @GET("funds/client-wallet")
    Observable<BaseRequestData<MyWalletBean>> getMyWalletData(@HeaderMap Map<String, Object> map);

    @POST("funds/consume-transfer")
    Observable<BaseRequestData<String>> getConvertedConsumptionData(@HeaderMap Map<String, Object> map);

    @GET("order/overtime-price")
    Observable<BaseRequestData<MarketPriceBean>> getOrderDelayPriceData(@HeaderMap Map<String, Object> map);

    @POST("order/apply-call-car-order-add-worktime")
    Observable<BaseRequestData<String>> getOrderDelayApplyData(@HeaderMap Map<String, Object> map);

    @GET("open/area-info-v2")
    Observable<BaseRequestData<OpenCityBean>> getOpenCityData(@HeaderMap Map<String, Object> map);

}




